home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -in_the_mag- / pdselect / ispell_yam / rexx / ispell_mr.rexx < prev    next >
OS/2 REXX Batch file  |  2000-03-08  |  7KB  |  217 lines

  1. /*-------------------------------------------------------------------------------------------------
  2.  
  3.    iSpell_mr.rexx 0.4
  4.    Brecht Machiels 1999
  5.  
  6. ---------------------------------------------------------------------------------------------------
  7.  
  8. $VER: iSpell_mr v0.4
  9. $AUTHOR: Copyright © 1999 Brecht Machiels
  10. $DESCRIPTION: MUIRexx spelling checker for YAM 2.0
  11.  
  12. --> OPTIONS <------------------------------------------------------------------------------------*/
  13.  
  14. BINPATH = "iSpell:bin/"
  15. SCREEN = "Workbench"
  16.  
  17. /*> DO NOT TOUCH <-------------------------------------------------------------------------------*/
  18.  
  19. ShowMe =                          0x80429ba8 /* V4  isg BOOL */
  20. Window_PublicScreen =             0x804278e4 /* V6  isg STRPTR */
  21. Group_Rows =                      0x8042b68f /* V4  is. LONG */
  22. Group_Spacing =                   0x8042866d /* V4  is. LONG */
  23.  
  24. MUIV_List_Insert_Bottom =         -3
  25.  
  26. /*-----------------------------------------------------------------------------------------------*/
  27.  
  28. OPTIONS RESULTS
  29.  
  30. PARSE ARG cmd opt
  31.  
  32. ADDRESS ISPELLMR
  33.  
  34. SELECT
  35.   WHEN cmd = 'INIT' THEN DO
  36.     a = OPEN('envvar', 'ENV:ISPELLYAM', 'R')
  37.     IF a = 0 THEN DO
  38.       ADDRESS 'AREXX' 'YAM:Rexx/iSpell_lang'
  39.       DO UNTIL a = 1
  40.         a = OPEN('envvar', 'ENV:ISPELLYAM', 'R')
  41.        END
  42.      END
  43.     language = READLN('envvar')
  44.     CLOSE('envvar')
  45.  
  46.     IF SHOW('P', 'IRexxSpell') THEN DO
  47.       a = OPEN('currentlang', 'ENV:ISPELLMR', 'R')
  48.       IF a = 0 THEN DO
  49.         ADDRESS 'AREXX' 'YAM:Rexx/iSpell_mr CLEANEXIT'
  50.         EXIT
  51.        END
  52.       IF language ~= READLN('currentlang') THEN DO
  53.         ADDRESS 'IRexxSpell' 'EXIT'
  54.         PRAGMA('S', 10240)
  55.         ADDRESS 'COMMAND' 'run <nil: >nil: 'BINPATH'iSpell -d'language' -r >nil: <nil:'
  56.         ADDRESS 'COMMAND' 'waitforport IRexxSpell'
  57.        END
  58.       CLOSE('currentlang')
  59.      END
  60.     ELSE DO
  61.       PRAGMA('S', 10240)
  62.       ADDRESS 'COMMAND' 'run <nil: >nil: 'BINPATH'iSpell -d'language' -r >nil: <nil:'
  63.       ADDRESS 'COMMAND' 'waitforport IRexxSpell'
  64.       ADDRESS 'COMMAND' 'setenv ISPELLMR 'language
  65.      END
  66.  
  67.     CALL Start
  68.    END
  69.  
  70.   WHEN cmd = 'NEXT' THEN DO
  71.     Address 'YAM' 'WRITEEDITOR "'NEXT word'"'
  72.     CALL Checking
  73.    END
  74.  
  75.   WHEN cmd = 'ADD' THEN DO
  76.     string ID CWORD
  77.     ADDRESS 'IRexxSpell' 'ADD 'TRANSLATE(result, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')''
  78.     Address 'YAM' 'WRITEEDITOR "'NEXT word'"'
  79.     CALL Checking
  80.    END
  81.  
  82.   WHEN cmd = 'ACCEPT' THEN DO
  83.     string ID CWORD
  84.     ADDRESS 'IRexxSpell' 'ACCEPT 'TRANSLATE(result, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')''
  85.     Address 'YAM' 'WRITEEDITOR "'NEXT word'"'
  86.     CALL Checking
  87.    END
  88.  
  89.   WHEN cmd = 'REPLACE' THEN DO
  90.     newword = STRIP(opt)
  91.     string ID CWORD
  92.     length = LENGTH(result)
  93.     ADDRESS 'YAM' 'WRITEEDITOR "'MARK on'"'
  94.     DO count = 1 TO length
  95.       ADDRESS 'YAM' 'WRITEEDITOR "'CURSOR right'"'
  96.     END
  97.     ADDRESS 'YAM' 'WRITEEDITOR "'ERASE'"'
  98.     ADDRESS 'YAM' 'WRITEEDITOR "'TEXT newword'"'
  99.     Address 'YAM' 'WRITEEDITOR "'NEXT word'"'
  100.     CALL Checking
  101.    END
  102.  
  103.   WHEN cmd = 'RESTART' then do
  104.     CALL Start
  105.    END
  106.  
  107.   WHEN cmd = 'STOP' then do
  108.     QUIT
  109.     EXIT
  110.    END
  111.  
  112.   WHEN cmd = 'CLEANEXIT' then do
  113.     Address 'IRexxSpell' 'EXIT'
  114.     QUIT
  115.     EXIT
  116.    END
  117.   OTHERWISE
  118.     window ID MAIN COMMAND '"QUIT"' PORT ISPELLMR TITLE '"iSpell"' ATTRS Window_PublicScreen SCREEN
  119.     group
  120.       string ID LSTN ATTRS ShowMe 0 CONTENT '1'
  121.       text ID CLINE
  122.     endgroup
  123.     group HORIZ
  124.       group
  125.           string ID CWORD COMMAND '"YAM:Rexx/iSpell_mr REPLACE %s"'
  126.           text ID TWORD LABEL '\n\n\033cLoading dictionary\n\n'
  127.         group HORIZ ATTRS Group_Rows 2 Group_Spacing 0
  128.           button ID NEXT  COMMAND '"YAM:Rexx/iSpell_mr NEXT"' HELP '"Ignore this word & continue checking"' LABEL 'Next'
  129.           button ID ACCPT COMMAND '"YAM:Rexx/iSpell_mr ACCEPT"' HELP '"Accept this word for this session"' LABEL 'Accept'
  130.           button ID ADD   COMMAND '"YAM:Rexx/iSpell_mr ADD"' HELP '"Add this word to the private dictionary"' LABEL 'Add'
  131.           button ID RSTRT COMMAND '"YAM:Rexx/iSpell_mr RESTART"' HELP '"Restart at the beginning of the document"' LABEL 'Restart'
  132.           button ID STOP  COMMAND '"YAM:Rexx/iSpell_mr STOP"' HELP '"Stop checking of the document"' LABEL 'Stop'
  133.           button ID EXIT  COMMAND '"YAM:Rexx/iSpell_mr CLEANEXIT"' HELP '"Stop checking & exit iSpell"' LABEL 'Exit'
  134.         endgroup
  135.       endgroup
  136.         list ID SLST COMMAND '"YAM:Rexx/iSpell_mr REPLACE %s"'
  137.     endgroup
  138.   endwindow
  139.   ADDRESS 'AREXX' 'YAM:Rexx/iSpell_mr INIT'
  140. END
  141.  
  142. EXIT
  143.  
  144. Start:
  145. Address 'YAM' 'WRITEEDITOR "'POSITION sof'"'
  146.  
  147. check = 'vzvzvz'
  148.  
  149. CALL Checking
  150. exit
  151.  
  152. Checking:
  153. prev = check
  154. ADDRESS 'YAM' 'WRITEEDITOR "'GETCURSOR column'"'
  155. wordpos = result + 1
  156. ADDRESS 'YAM' 'WRITEEDITOR GETLINE'
  157. line = result
  158.  
  159. text ID CLINE LABEL line
  160.  
  161. IF POS(' ', SUBSTR(line, wordpos)) ~= 0 THEN
  162.   check = SUBSTR(line, wordpos, POS(' ', SUBSTR(line, wordpos)))
  163. ELSE check = STRIP(SUBSTR(line, wordpos), 'T', '0a'X)
  164. check = STRIP(STRIP(check), 'B', '.,;:"''[]{}()<>?!')
  165. IF check = '' THEN CALL Finished
  166.  
  167. string ID CWORD CONTENT check
  168.  
  169. SELECT
  170.   WHEN RIGHT(prev, LENGTH(prev) - POS(' ', TRANSLATE(prev, ' ', '.,;:/_&|@"#''§^ç<>{}°©1234567890[]®', ' '))) = check THEN DO
  171.     ADDRESS 'YAM' 'WRITEEDITOR "'NEXT word'"'
  172.     CALL Checking
  173.    END
  174.   WHEN VERIFY(check, '.,;:/_&|@"#''§^ç<>{}°©1234567890[]()®', 'M') ~= 0 THEN DO
  175.     ADDRESS 'YAM' 'WRITEEDITOR "'NEXT word'"'
  176.     CALL Checking
  177.    END
  178.   OTHERWISE DO
  179.     IF VERIFY(SUBSTR(check, 2), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'M') = 0 THEN
  180.       ADDRESS 'IRexxSpell' 'QUICKCHECK 'check''
  181.     ELSE ADDRESS 'IRexxSpell' 'QUICKCHECK 'TRANSLATE(check, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')''
  182.     IF result = 'bad' THEN DO
  183.       text ID TWORD LABEL '\n\033c"\033b'check'\033n" is spelled incorrectly\n\n\033cSelect an option'
  184.       ADDRESS 'IRexxSpell' 'CHECK 'check''
  185.       r = result
  186.       r1 = substr(r,1,1)
  187.       SELECT
  188.         WHEN r1 = '#' THEN suggest = "No_Suggestions"
  189.         WHEN r1 = '&' THEN suggest = space(compress(r,'&1234567890:'))
  190.         OTHERWISE suggest = check
  191.       END
  192.       string ID LSTN
  193.       DO index = 0 TO result
  194.         list ID SLST REMOVE POS 0
  195.       END
  196.       suglist = TRANSLATE(suggest, ' ', ',')
  197.       string ID LSTN CONTENT words(suglist)
  198.       index = 0
  199.       DO index = index + 1 WHILE index ~= words(suglist) + 1
  200.         list ID SLST INSERT POS MUIV_List_Insert_Bottom STRING subword(suglist,index,1)
  201.       END
  202.       EXIT
  203.      END
  204.     ELSE DO
  205.       Address 'YAM' 'WRITEEDITOR "'NEXT word'"'
  206.       CALL Checking
  207.      END
  208.   END
  209. END
  210. EXIT
  211.  
  212. Finished:
  213. text ID TWORD LABEL '\n\n\033cEnd of document reached\n\n'
  214.  
  215. EXIT
  216.  
  217.